This page last changed on Dec 13, 2004 by mcampbell.

配置 - web.xml

为配置WebWork的组件管理, 必须在web.xml的适当位置加入下列内容:
<filter>
    <filter-name>container</filter-name>
    <filter-class>com.opensymphony.webwork.lifecycle.RequestLifecycleFilter</filter-class>
</filter>

<filter-mapping>
   <filter-name>container</filter-name>
   <url-pattern>*.action</url-pattern> <!-- modify appropriately -->
</filter-mapping>

<!-- 你也可以选择将filter对应到任一URI而不仅是*.action.  --> 
<!--下面这种情况就需要这么做:  -->
<!-- * 在接到请求后直接调用JSP(因为仅使用了*.action) -->
<!-- * JSP中包含一个活动并通过ww:action标签运行-->
<!-- * 活动实现了一些enabler接口一获取组件为其服务 -->
<!-- 这样做的理由: (Per Patrick Lightbody) -->
<!-- "组件通过在request的属性中查找ComponentManager进行工作. -->
<!-- 它通过filter发生作用. 如果在整个过程中没有一个#42;.action, -->
<!-- filter不会起作用, 组件也绝不会工作." -->
<!-- 这么做的代价很小, 因此不要过度担心  -->
<!-- 这样做的性能. -->
<!-- <filter-mapping> -->
<!--    <filter-name>container</filter-name> -->
<!--    <url-pattern>*</url-pattern>  -->
<!-- </filter-mapping> -->

<listener>
    <listener-class>com.opensymphony.webwork.lifecycle.SessionLifecycleListener</listener-class>
</listener>

<listener>
    <listener-class>com.opensymphony.webwork.lifecycle.ApplicationLifecycleListener</listener-class>
</listener>

这些设置允许WebWork在application, session和request范围中管理组件. 注意即使你的应用中不使用全部scope, 上述三个scope也必须在web.xml中指定, 这样WebWork的组件管理才能正确工作.

配置 - xwork.xml

ComponentInterceptor用于对XWork的活动进行反转控制(也就是说, 为活动提供组件). ComponentInterceptor应当声明在xwork.xml的<interceptors>部分:

<interceptor name="component"
        class="com.opensymphony.xwork.interceptor.component.ComponentInterceptor"/>

应当确保所有需要组件的活动都应用了这个截取器. (关于如何将截取器应用到活动上, 参见OS:XWork Interceptors.)
如果你向对活动和组件之外的对象使用反转控制, 你需要直接使用ComponentManager.

还需要注意, ComponentInterceptor是WebWork的缺省截取器栈的一部分. 因此, 如果活动使用了defaultStack, 就已经包括了ComponentInterceptor.

配置 - components.xml

文件components.xml用于定义可用组件. 这里指定的组件将被加载到XWork的ComponentManager可以被任何活动使用. components.xml必须放在根类路径中(也就是WEB-INF/classes目录).
这里有一个components.xml样例, 它配置了一个Counter组件. Counter将生存在session对象中, 将被传递到任何实现CounterAware接口的活动中:
<components>
    <component>
        <scope>session</scope>
        <class>com.opensymphony.webwork.example.counter.Counter</class>
        <enabler>com.opensymphony.webwork.example.counter.CounterAware</enabler>
    </component>
</components>

每一个组件元素必需包含下列属性:

  • scope: 有效值为application, sessionrequest. 它决定组件的生存时间. Application组件在应用启动时创建, 将在整个应用的生存期间一直存在. Session组件存在于一个用户会话过程中, request组件仅存在于一个客户请求期间.
  • class: 组件的类名. 该对象的一个实例将存在于scope指定的周期中, 可以用于任何活动(或其他代码). 注意组件时延迟加载(lazy-loaded)的, 因此如果没有对象使用该组件, 它将不会真正被实例化. 该组件必须有一个无参构造函数.
  • enabler: 任何实现或集成该类(或接口)的活动都将被设置该组件.

注意虽然组件可以依赖于其他组件, 但不能依赖于更小范围的组件. 因此, 一个session范围的组件不能依赖于一个请求范围的组件. 因此, 一个session范围的组件不能依赖于一个请求范围的组件.

Document generated by Confluence on Dec 14, 2004 16:36